package apigateway.project.register.Interface;

import apigateway.project.commen.config.ServiceDefinition;
import apigateway.project.commen.config.ServiceInstance;

/**
 * 注册中心接口
 */
public interface RegisterCenter {
    /**
     * 初始化注册中心
     * @param registerAddress
     * @param env
     */
    void init(String registerAddress, String env);

    /**
     * 注册实例接口
     * @param serviceDefinition
     * @param serviceInstance
     */
    void register(ServiceDefinition serviceDefinition, ServiceInstance serviceInstance);

    /**
     * 删除实例接口
     * @param serviceDefinition
     * @param serviceInstance
     */
    void deregister(ServiceDefinition serviceDefinition, ServiceInstance serviceInstance);

    /**
     * 订阅服务接口
     * 1.检查存在未订阅的服务
     * 2.对未订阅的服务执行注册中心监听器的任务
     * 3.订阅未订阅的服务,为其添加eventListener以监听服务
     * @param registerCenterListener
     */
    void subscribe(RegisterCenterListener registerCenterListener);
}
